//
// Created by 吴俊颐 on 2025/7/22.
//

#ifndef FPGA_HPP
#define FPGA_HPP
#include "gpio.hpp"
#include <registers.hpp>

namespace FPGA
{
    using FPGA_RESET_PIN = hal::gpio::portC::pin5;

    inline void RESET()
    {
        FPGA_RESET_PIN cfg;
        cfg.initializer().mode.output().pull.none().speed.very_high();
        // 第一阶段：复位信号激活（低电平有效时省略此步）
        FPGA_RESET_PIN::set();
        HAL_Delay(10);// 保证稳定

        // 正式复位脉冲
        FPGA_RESET_PIN::clear();
        HAL_Delay(50);// 维持复位状态时间（典型值20-100ms）

        // 结束复位
        FPGA_RESET_PIN::set();
    }

    struct FPGA_INFO
    {
        uint32_t freq_word;// [W] 输出频率字
        uint32_t counter;// [W] 输出频率计数器
        uint32_t div;// [W] 输出频率分频数
        uint16_t vpp;// [R] 输出电压
        uint16_t state_flag;// [W/R] 状态标志
        uint16_t adc_data; // [R] ADC数据
        uint16_t verify;// [R] 验证

    };
    struct fpga_info
    {
        //uint32_t 占两位 uint16_t 占一位
        using freq_word = utils::fpgaRegister<0,uint32_t>;// [W] 输出频率字
        using counter =utils::fpgaRegister<2,uint32_t>;// [W] 输出频率计数器
        using div=utils::fpgaRegister<4,uint32_t>;// [W] 输出频率分频数
        using vpp=utils::fpgaRegister<6>;// [R] 输出电压
        using state_flag=utils::fpgaRegister<7>;// [W/R] 状态标志
        using verify=utils::fpgaRegister<8>;// [R] 验证
    };

}// namespace FPGA


#endif //FPGA_HPP
